/* gm_sim.c -- Simulador gráfico de futebol de robôs
 * 
 * Copyright (C) 2008, Gustavo Campos Martins <>
 * GEAR - Grupo de Estudos Avançados em Robótica
 * <http://www.sel.eesc.usp.br/gear>
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

#include "gm_sim.h"
#include "gm_sim_utils.h"
#include "gm_sim_glutstuff.h"
#include "gm_sim_physics.h"

static gm_sim_t *self;

/** Inicializa o simulador.
 *
 * @return Ponteiro para a estrutura que representa o simulador,
 * essa estrutura é passada como parâmetro em outras funções.
 */
void
gm_sim_run()
{
	self = malloc( sizeof(gm_sim_t) );

	self->physics_quit = 0;
	sem_init(&self->change, 0, 1);
		
	/* inicializa a física do simulador */
	//gm_sim_phys_init(self);

	/* inicializa o glut */
	//gm_sim_glut_init(self);

}

/** Atualiza um vetor com dos dados de posições da bola e jogadores.
 * 
 * @param id_robot Número de identificação do robô de referência.
 *
 * @param *vector Ponteiro para o vetor que será atualizado com os dados do 
 * jogo (posição da bola e dos robôs e angulo dos robôs). <b>Este vetor deve 
 * estar alocado com pelo menos 32 posições antes da função ser chamada.</b>
 * Disposição dos dados:
 * 	|BALL_X|BALL_Y|POS1_X|POS1_Y|POS1_A|POS2_X|...|
 */
void 
gm_sim_get_field( unsigned int * vector )
{

}

/** Atualiza um vetor com dados sobre as dimensões do mundo.
 *
 * @param *vector Ponteiro para o vetor que será atualizado com os dados do 
 * mundo. <b>Este vetor deve estar alocado com pelo menos 27 posições antes 
 * da função ser chamada.</b>
 */
void 
gm_sim_get_world( unsigned int * vector )
{

}

/** Seta a velocidade de um robô.
 *
 * @param id_robot O número do robô (de 0 a 4 robôs do nosso time e de 5 a
 * 9 são os robôs do time adversário).
 *
 * @param vx Velocidade no eixo X em m/s.
 *
 * @param vy Velocidade no eixo Y em m/s.
 *
 * @param va Velocidade angular em rad/s.
 */
void 
gm_sim_robot_set_vel( int id_robot, 
		      float vx, 
		      float vy, 
		      float va )
{

}

/** Faz um robô chutar.
 *
 * @param id_robot O número do robô (de 0 a 4 robôs do nosso time e de 5 a
 * 9 são os robôs do time adversário).
 *
 * @param level Nível (força) do chute.
 */
void 
gm_sim_robot_kick( int id_robot, 
		   int level )
{

}

/** Ativa ou desativa o rolinho de um determinado robô.
 *
 * @param id_robot O número do robô (de 0 a 4 robôs do nosso time e de 5 a
 * 9 são os robôs do time adversário).
 *
 * @param enable Se for 0 desativa o rolinho, caso contrário ativa o rolinho.
 */
void 
gm_sim_robot_dribble_enable( int id_robot, 
			     int enable )
{

}

/**  
 * Destrói o simulador.
 */
void 
gm_sim_destroy( void )
{
	self->physics_quit = 1;
}

